%define	stdin	0
%define	stdout	1
%define	stderr	2
%define	_		0

; Macro fpop - desempilha st0 sem salvar seu valor
%macro fpop	0
	ffree	st0
	fincstp
%endmacro
;Macro multipush - armazena na pilha todos os parametros passados
%macro multipush 1-*
	%rep %0
		push %1
		%rotate 1
	%endrep
%endmacro




;Macro multipop - recupera da pilha todos os parametro passados
%macro multipop 1-*
	%rep %0
		%rotate -1
		pop %1
	%endrep
%endmacro




;Macro xcall - uma extensao de call para chamada com parametros
%macro xcall 1-10 0,0,0,0,0,0,0,0,0
	%%procedure: equ %1
	
	multipush ebx,ecx,edx,esi,edi		; pusha sem eax
	%rep	9
		%rotate -1
		push	%1
	%endrep

	call	%%procedure

	add		esp,36
	multipop ebx, ecx, edx, esi, edi 	; popa sem eax
%endmacro
